package censo

import scala.collection.mutable.ArrayBuffer

class Censo(anioCenso:Int){
  
  //tiene todos los registros 
  val _registros:ArrayBuffer[Registro] = new ArrayBuffer [Registro] 
  
 
		  def registros=_registros
		  def agregarRegistro(r:Registro)= registros.+=(r)
		  
		  
		  //A
		  def totalDeVentas():Double=this.pasarVentasALista.foldLeft(0.0)((r,c) => r+c)	  
		  
		  // devuelve una lista con todos los montosDeVentas de todos los registros en ese anio 
		  def pasarVentasALista:ArrayBuffer[Double]=(this.registros.filter{r => r.anio==anioCenso}).map { a => a._montoTotalDeVentas }
		  //B
		  def totalDeGanancias():Double=this.pasarGananciasALista.foldLeft(0.0)((r,c) => r+c)
		  def pasarGananciasALista:ArrayBuffer[Double]=registros map { a => a._montoTotalDeGanancias }
		  //C
		  def totalDeVentasSuperiorA(valorAComparar:Double):Int= (this.registros.filter(r => r.montoTotalDeVentas>valorAComparar && r.anio==anioCenso && r.yoPaso)).size
		   //D
		  def totalDeGananciasSuperiorA(valorAComparar:Double):Int=(this.registros.filter(r => r.montoTotalDeGanancias>valorAComparar && r.anio==anioCenso && r.yoPaso)).size
		  //E
		  def totalDeTasaDeGananciaSuperiorA(valorAComparar:Double):Int=(this.registros.filter(r => r.tasaDeGanancia>valorAComparar && r.anio==anioCenso && r.yoPaso)).size
		  //F      preguntar si hace falta preguntar por el a�o del registro
		  def asociacionDeProvinciaYtotalDeVentas():List[Map[String,Double]]={    
		    var resultado:List[Map[String,Double]]=Nil
		    this.registros.foreach{r : Registro =>if ( r.anio==anioCenso) resultado++Map( r.nombreDeLaProvincia ->r.montoTotalDeVentas )}
		    return resultado
		  }
		  //G
		  def nombreDeEmpresasQueSuperan(valorAComparar:Double):ArrayBuffer[String]=(this.registros.filter(r => r.nombreEmpresasConVentasMayorA(valorAComparar)&& r.yoPaso)).map{ r => r.nombreDeLaEmpresa}
		  //H  verifica el a�o,luego arma una lista de fuente, y luego quita los repetidos
		  def fuentesQueAportaronUnRegistro(anioComparar:Int):Set[Fuente]=((this.registros.filter{r => r.anio==anioComparar}).map{r => r.getFuente}).toSet
		  //I   busca registros por a�o,los ordena por tasa y pido el primero
		  def nombreDeLAEmpresaconMayorGananciaEn(anioAComparar:Int):String=(this.registros.filter(r => r.anio==anioAComparar && r.yoPaso)).sortBy(r => r.montoTotalDeGanancias).head.empresa.nombre
		 
		  
		  
		  
		  
}